访问电脑版页面

导航:老古开发网手机版单片机MSP430单片机

通用MSP430—I2C程序

导读:
关键字:
//==================================//
//通用MSP430—I2C程序
//收藏:清风徐徐
//QQ:78779514
//EMAIL:XSL88888@TOM.com
//2004.2.4
//===================================//
#include "MSP430x14x.h"
//P3.2  SCL
//P3.3  SDA

#define SDA_1       P3OUT |=  BIT3              //SDA = 1
#define SDA_0       P3OUT &=~ BIT3              //SDA = 0
#define SCL_1       P3OUT |=  BIT2              //SCL = 1
#define SCL_0       P3OUT &=~ BIT2              //SCL = 0
#define DIR_IN      P3DIR &=~ BIT3;  SDA_1      //I/O口为输入
#define DIR_OUT     P3DIR |=  BIT3              //I/0口为输出
#define SDA_IN      ((P3IN >> 3) & 0x01)        //Read SDA

unsigned int a[50];

static void Delay(unsigned int n)
{
   unsigned int i;
   for (i=0; i }

void Init(void)
{
  SCL_1;
  Delay(5);
  SDA_1;
  Delay(5);
}

void Start(void)
{
  SDA_1;
  Delay(5);
  SCL_1;
  Delay(5);
  SDA_0;
  Delay(5);
  SCL_0;
  Delay(5);
}

void Stop(void)
{
  SDA_0;
  Delay(5);
  SCL_1;
  Delay(5);
  SDA_1;
  Delay(5);
}

void WriteByte(unsigned char WriteData)
{
  unsigned char i;
  for (i=0; i<8; i++)
  {
    SCL_0;
    Delay(5);
    if (((WriteData >> 7) & 0x01) == 0x01)
    {
      SDA_1;
    }
    else
    {
      SDA_0;
    }
    Delay(5);
    SCL_1;
    WriteData = WriteData << 1;
    Delay(5);
  }
  SCL_0;
  SDA_1;
  Delay(5);
  Delay(5);
}

unsigned char ReadByte(void)
{
  unsigned char i;
  unsigned char TempBit  = 0;
  unsigned char TempData = 0;
  SCL_0;
  Delay(5);
  SDA_1;
  for (i=0; i<8; i++)
  {
    Delay(5);
    SCL_1;
    Delay(5);
    DIR_IN;
    if (SDA_IN == 0x01 /*sda==1*/)
    {
      TempBit = 1;
    }
    else
    {
      TempBit = 0;
    }
    DIR_OUT;
    TempData = (TempData << 1) | TempBit;
    SCL_0;
  }
  Delay(5);
  return(TempData);
}

void ReceiveAck(void)
{
  unsigned char i = 0;
  SCL_1;
  Delay(5);
  DIR_IN;
  while ((SDA_IN == 0x01 /*sda==1*/) && (i < 255)/*调试方便,可以不要*/)
  {
    i++;
  }
  DIR_OUT;
  SCL_0;
  Delay(5);
}

void Acknowledge(void)
{
  SCL_0;
  Delay(5);
  DIR_OUT;
  SDA_0;
  SCL_1;
  Delay(5);
  SCL_0;
}

unsigned int ReadWord(unsigned char unit/*address*/)
{
  unsigned char HighData = 0;
  unsigned char LowData  = 0;
  unsigned int  TempData = 0;
  Start();
  WriteByte(0xa0);
  ReceiveAck();
  WriteByte(unit);
  ReceiveAck();
  Start();
  WriteByte(0xa1);
  ReceiveAck();
  LowData  = ReadByte();
  Acknowledge();
  HighData = ReadByte();
  Stop();
  TempData = (HighData << 8) + LowData;
  Delay(1000);
  return(TempData);
}

void ReadWords(unsigned char unit/*address*/)
{
  unsigned char i;
  unsigned char HighData = 0;
  unsigned char LowData  = 0;
  unsigned int  TempData = 0;
  Start();
  WriteByte(0xa0);
  ReceiveAck();
  WriteByte(unit);
  ReceiveAck();
  Start();
  WriteByte(0xa1);
  ReceiveAck();
  for (i=0; i<49; i++)
  {
    LowData  = ReadByte();
    Acknowledge();
    HighData = ReadByte();
    Acknowledge();
    a[i]= (HighData << 8) + LowData;
  }
  LowData  = ReadByte();
  Acknowledge();
  HighData = ReadByte();
  Stop();
  a[49] = (HighData << 8) + LowData;
  Delay(1000);
}

void WriteWord(unsigned char unit/*address*/, unsigned int WriteData)
{
  unsigned char LowData  = 0;
  unsigned char HighData = 0;
  LowData  = (unsigned char)WriteData;
  HighData = (unsigned char)(WriteData >> 8);
  Start();
  WriteByte(0xa0);
  ReceiveAck();
  WriteByte(unit);
  ReceiveAck();
  WriteByte(LowData);
  ReceiveAck();
  WriteByte(HighData);
  ReceiveAck();
  Stop();
  Delay(2000);
}
来源:   作者:  2004/2/25 0:00:00
栏目: [ MSP430单片机]

相关阅读

基于MSP430和USB的数据采集系统

通用MSP430—I2C程序

msp430软件安装破解过程

基于MSP430与ATT7022B的四遥测量模块

基于MSP430F149电机保护算法的实现

在通用微控制器MSP430™中集成多种功能

德州仪器线性稳压器将MSP430待机功耗减半

浅谈MSP430单片机的8大输出方式

AD9850驱动程序--MSP430版本

MSP430单片机对步进电机的驱动控制设计

MSP430F13X系列的单片机ADC要外加电阻、电容? 

基于MSP430微控制器的电容触摸实现方案和LED PWM驱动

MSP430F147无线温度接收

MSP430电容触摸转轮

基于MSP430系列单片机的常用程序编写总结

MSP430对上MSP432,谁才是最强王者

浅谈TSS-5单板控制器的功能应用及MSP430的特性

MSP430单片机模块设计方案解析

德州仪器全新MSP430 FRAM微控制器开创超低功耗新时代

德州仪器推出MSP430AFE2xx计量模拟前端(AFE) 微控制器